2025 - Bibliometric Childhood Obesity

Published

Friday, 28/02/2025

1 Setup

Code
pacman::p_load(tidyverse, googledrive, bibliometrix, janitor, stringi, 
               summarytools)

2 Import Database and Export

2.1 Search Criteria

  • Database: Scopus
  • Date Access: 23/02/2025
  • Search Term:

TITLE ( “pediatric” OR “paediatric” OR “childhood” OR “adolescent” OR “youth” ) AND TITLE ( “obesity” OR “obese” OR “overweight” ) AND PUBYEAR > 2003 AND PUBYEAR < 2024 AND ( LIMIT-TO ( DOCTYPE , “ar” ) ) AND ( LIMIT-TO ( PUBSTAGE , “final” ) ) AND ( LIMIT-TO ( SRCTYPE , “j” ) ) AND ( LIMIT-TO ( LANGUAGE , “English” ) )

2.2 Import Database

Code
pedob_bibds <- convert2df("250223_ScopusSearch.csv", 
                          dbsource = "scopus", 
                          format = "csv", 
                          remove.duplicates = TRUE)

head(pedob_bibds)

write_rds(pedob_bibds, "pedob_bibds.rds")
Code
pedob_bibds <- read_rds("pedob_bibds.rds")

2.3 Explore

Code
dupti <- pedob_bibds %>% 
  count(TI, sort = T) %>% 
  filter(n > 1) %>% 
  pull(TI)

pedob_bibds %>% 
  arrange(TI, PY) %>% 
  filter(TI %in% dupti) %>% 
  mutate(ti_short = str_sub(TI, 1, 100), .before = 1)

there was however several with same title.

Code
pedob_bibds %>% 
  count(PY)
Code
pedob_bibds %>% 
  count(DT)

3 Analysis

3.1 Summary

Code
pedob_bibres <- biblioAnalysis(pedob_bibds, sep = ";")

write_rds(pedob_bibres, "pedob_bibres.rds")
Code
pedob_bibres <- read_rds("pedob_bibres.rds")

summary(pedob_bibres)


MAIN INFORMATION ABOUT DATA

 Timespan                              1994 : 2023 
 Sources (Journals, Books, etc)        2444 
 Documents                             12774 
 Annual Growth Rate %                  13.56 
 Document Average Age                  10.2 
 Average citations per doc             37.4 
 Average citations per year per doc    2.94 
 References                            383117 
 
DOCUMENT TYPES                     
 article      12774 
 
DOCUMENT CONTENTS
 Keywords Plus (ID)                    17898 
 Author's Keywords (DE)                11720 
 
AUTHORS
 Authors                               44307 
 Author Appearances                    80023 
 Authors of single-authored docs       563 
 
AUTHORS COLLABORATION
 Single-authored docs                  637 
 Documents per Author                  0.288 
 Co-Authors per Doc                    6.26 
 International co-authorships %        19.45 
 

Annual Scientific Production

 Year    Articles
    1994       20
    1995       30
    1996       28
    1997       37
    1998       34
    1999       51
    2000       70
    2001      100
    2002      113
    2003      118
    2004      155
    2005      209
    2006      263
    2007      308
    2008      386
    2009      462
    2010      529
    2011      599
    2012      694
    2013      740
    2014      736
    2015      736
    2016      714
    2017      763
    2018      762
    2019      798
    2020      816
    2021      828
    2022      875
    2023      800

Annual Percentage Growth Rate 13.56 


Most Productive Authors

   Authors        Articles Authors        Articles Fractionalized
1      WANG Y          104     WANG Y                       20.44
2      CAPRIO S         98     CAPRIO S                     16.65
3      THIVEL D         77     LEE S                        15.64
4      MORENO LA        74     DANIELS SR                   12.00
5      SARTORIO A       70     REINEHR T                    10.84
6      DÂMASO AR        69     THIVEL D                     10.36
7      TUFIK S          68     GORAN MI                     10.12
8      REINEHR T        67     SARTORIO A                    9.93
9      JR               65     STORY M                       9.47
10     LEE S            64     BAUR LA                       9.23


Top manuscripts per citations

                      Paper                                    DOI   TC TCperYear   NTC
1  OGDEN CL, 2014, JAMA              10.1001/jama.2014.732         6699       558 161.0
2  BENTHAM J, 2017, LANCET           10.1016/S0140-6736(17)32129-3 5727       636 156.4
3  BARLOW SE, 2007, PEDIATRICS       10.1542/peds.2007-2329C       3718       196  37.3
4  FRAYLING TM, 2007, SCIENCE        10.1126/science.1141634       3706       195  37.2
5  HEDLEY AA, 2004, J AM MED ASSOC   10.1001/jama.291.23.2847      3642       166  30.6
6  WHITAKER RC, 1997, NEW ENGL J MED 10.1056/NEJM199709253371301   3399       117  21.9
7  OGDEN CL, 2002, J AM MED ASSOC    10.1001/jama.288.14.1728      3328       139  20.4
8  OGDEN CL, 2012, J AM MED ASSOC    10.1001/jama.2012.40          3117       223  75.2
9  WEISS R, 2004, NEW ENGL J MED     10.1056/NEJMoa031049          2795       127  23.5
10 WANG Y, 2006, INT J PEDIATR OBES  10.1080/17477160600586747     2128       106  25.7


Corresponding Author's Countries

          Country Articles   Freq  SCP MCP MCP_Ratio
1  USA                3697 0.3411 3239 458    0.1239
2  CHINA               566 0.0522  409 157    0.2774
3  BRAZIL              564 0.0520  459 105    0.1862
4  UNITED KINGDOM      439 0.0405  304 135    0.3075
5  AUSTRALIA           394 0.0363  271 123    0.3122
6  ITALY               394 0.0363  319  75    0.1904
7  CANADA              362 0.0334  280  82    0.2265
8  GERMANY             347 0.0320  240 107    0.3084
9  SPAIN               320 0.0295  227  93    0.2906
10 TURKEY              309 0.0285  299  10    0.0324


SCP: Single Country Publications

MCP: Multiple Country Publications


Total Citations per Country

           Country      Total Citations Average Article Citations
1  USA                           191091                     51.69
2  UNITED KINGDOM                 34324                     78.19
3  AUSTRALIA                      15886                     40.32
4  GERMANY                        15587                     44.92
5  CHINA                          11835                     20.91
6  CANADA                         11720                     32.38
7  ITALY                          10226                     25.95
8  BRAZIL                         10164                     18.02
9  FRANCE                          8709                     36.90
10 SPAIN                           8040                     25.12


Most Relevant Sources

                                                      Sources        Articles
1  INTERNATIONAL JOURNAL OF OBESITY                                       382
2  PEDIATRIC OBESITY                                                      269
3  OBESITY                                                                261
4  CHILDHOOD OBESITY                                                      221
5  BMC PUBLIC HEALTH                                                      215
6  JOURNAL OF PEDIATRIC ENDOCRINOLOGY AND METABOLISM                      198
7  NUTRIENTS                                                              190
8  PLOS ONE                                                               174
9  INTERNATIONAL JOURNAL OF ENVIRONMENTAL RESEARCH AND PUBLIC HEALTH      173
10 PEDIATRICS                                                             150


Most Relevant Keywords

   Author Keywords (DE)      Articles Keywords-Plus (ID)     Articles
1         OBESITY                4850      FEMALE               16486
2         ADOLESCENTS            1606      MALE                 15664
3         OVERWEIGHT             1418      ADOLESCENT           15041
4         CHILDHOOD OBESITY      1244      CHILD                14469
5         CHILDREN               1228      OBESITY              13768
6         ADOLESCENT              895      HUMAN                11268
7         BODY MASS INDEX         651      ARTICLE               9382
8         PHYSICAL ACTIVITY       579      HUMANS                9327
9         INSULIN RESISTANCE      416      BODY MASS             6998
10        CHILD                   405      CHILDHOOD OBESITY     5905

3.2 Production

3.2.1 Summary

Code
pedob_bibds %>% 
  count(PY) %>% 
  mutate(Gap = case_when(
    PY %in% 1994:2003 ~ "1994-2003", 
    PY %in% 2004:2013 ~ "2004-2013", 
    PY %in% 2014:2023 ~ "2014-2023"
  )) %>% 
  group_by(Gap) %>% 
  summarise(n = sum(n), .groups = "drop") %>% 
  bind_rows(., 
            summarise(., Gap = "1994-2023 (total)", n = sum(n)))

3.2.2 Trend

Code
gmagr_9423 <- pedob_bibds %>% 
  count(PY)  %>%
  mutate(AGR = (n - lag(n)) / lag(n) * 100) %>% 
  filter(!is.na(AGR)) %>% 
  summarise(geommean_agr = (exp(mean(log(1 + AGR / 100))) - 1) * 100) %>% 
  pull(geommean_agr)

gmagr_9423
[1] 13.56472
Code
gmagr_9403 <- pedob_bibds %>% 
  count(PY)  %>% 
  filter(PY %in% 1994:2003) %>% 
  mutate(AGR = (n - lag(n)) / lag(n) * 100) %>% 
  filter(!is.na(AGR)) %>% 
  summarise(geommean_agr = (exp(mean(log(1 + AGR / 100))) - 1) * 100) %>% 
  pull(geommean_agr)

gmagr_9403
[1] 21.80082
Code
gmagr_0413 <- pedob_bibds %>% 
  count(PY)  %>% 
  filter(PY %in% 2004:2013) %>% 
  mutate(AGR = (n - lag(n)) / lag(n) * 100) %>% 
  filter(!is.na(AGR)) %>% 
  summarise(geommean_agr = (exp(mean(log(1 + AGR / 100))) - 1) * 100) %>% 
  pull(geommean_agr)

gmagr_0413
[1] 18.96887
Code
gmagr_1423 <- pedob_bibds %>% 
  count(PY)  %>% 
  filter(PY %in% 2014:2023) %>% 
  mutate(AGR = (n - lag(n)) / lag(n) * 100) %>% 
  filter(!is.na(AGR)) %>% 
  summarise(geommean_agr = (exp(mean(log(1 + AGR / 100))) - 1) * 100) %>% 
  pull(geommean_agr)

gmagr_1423
[1] 0.9307673
Code
#4682B4 steelblue
#CD5C5C indianred
#2E8B57 seagreen

pedob_bibds %>% 
  count(PY) %>% 
  ggplot(aes(x = PY, y = n)) + 
  geom_vline(xintercept = c(2003.5, 2013.5), 
             linetype = "dashed", colour = "indianred") + #CD5C5C
  geom_col(fill = "seagreen", colour = "black") + #2E8B57
  annotate("text", x = 2005, y = 1050, 
           label = paste0("1994-2023 AGR = ", 
                          sprintf("%.1f", gmagr_9423), "%"), 
           color = "black", hjust = 0, size = 3) +  # 1994-2023
  annotate("text", x = 1995, y = 150, 
           label = paste0("1994-2003 AGR = ", 
                          sprintf("%.1f", gmagr_9403), "%"), 
           color = "black", hjust = 0, size = 3) +  # 1994-2003
  annotate("text", x = 2005, y = 850, 
           label = paste0("2004-2013 AGR = ", 
                          sprintf("%.1f", gmagr_0413), "%"), 
           color = "black", hjust = 0, size = 3) +  # 2004-2013
  annotate("text", x = 2015, y = 950, 
           label = paste0("2014-2023 AGR = ", 
                          sprintf("%.1f", gmagr_1423), "%"), 
           color = "black", hjust = 0, size = 3) +  # 2014-2023
  scale_x_continuous(breaks = seq(1986, 2030, 4)) +
  scale_y_continuous(breaks = seq(0, 1100, 100)) + 
  coord_cartesian(ylim = c(0, 1050)) +
  labs(x = "Publication Year",
       y = "Number of Publications") +
  theme_bw()

Code
ggsave("production plot.png")

3.3 Journal

3.3.1 Summary

Code
pedob_bibds %>% 
  summarise(total_unique_journals = n_distinct(SO))
Code
pedob_bibds %>% 
  count(SO, sort = T) %>% 
  slice_max(n, n = 20) %>% 
  mutate(rank = row_number(), .before = 1)

3.3.2 Trend

Code
pedob_bibds %>% 
  filter(PY %in% 1994:2003) %>% 
  count(SO, sort = TRUE) %>% 
  slice_max(n, n = 10) %>% 
  mutate(rank = row_number(), .before = 1)
Code
pedob_bibds %>% 
  filter(PY %in% 2004:2013) %>% 
  count(SO, sort = TRUE) %>% 
  slice_max(n, n = 10) %>% 
  mutate(rank = row_number(), .before = 1)
Code
pedob_bibds %>% 
  filter(PY %in% 2014:2023) %>% 
  count(SO, sort = TRUE) %>% 
  slice_max(n, n = 10) %>% 
  mutate(rank = row_number(), .before = 1)

3.4 Author

Code
oriau_byti0 <- pedob_bibds %>% 
  select(TI, PY, AF) %>% 
  separate_wider_delim(AF, delim = ";", names = paste0("af", 1:10), 
                       too_many = "drop", too_few = "align_start") %>% 
  pivot_longer(cols = starts_with("af"), 
               names_to = "author_position", 
               values_to = "au_nameid", values_drop_na = TRUE) %>% 
  mutate(au_nameid = str_trim(au_nameid),  
         au_name = str_extract(au_nameid, "^[^(]+"), 
         au_name = str_trim(au_name), 
         au_name = str_to_upper(au_name), 
         au_name = stri_trans_general(au_name, "Latin-ASCII"), 
         au_name = str_replace_all(au_name, "-", " "), 
         au_name = str_replace_all(au_name, ",", " "), 
         au_name = str_replace_all(au_name, "\\.", " "), 
         au_name = str_trim(au_name), 
         au_name = str_replace_all(au_name, "\\s+", " "), 
         au_scid = str_extract(au_nameid, "(?<=\\().+?(?=\\))")) %>% 
  arrange(au_scid)

oriau_byti0
Code
# Step 1: Standardized Name by Scopus ID (Preferring Longer Names)
stdname_list1 <- oriau_byti0 %>% 
  arrange(au_scid, desc(nchar(au_name)), PY, author_position) %>%  # Prefer longer names first
  group_by(au_scid) %>%
  summarise(std_name = first(au_name), .groups = "drop") %>% 
  arrange(desc(au_scid))  # Descending order by Scopus ID

# Step 2: Merge Standardized Name Back
oriau_byti1 <- oriau_byti0 %>% 
  left_join(stdname_list1, by = "au_scid")

# Step 3: Standardized Scopus ID by Standardized Name (Preferring Longer Names)
stdscid_list1 <- oriau_byti1 %>% 
  arrange(desc(nchar(std_name)), PY, author_position) %>%  # Prefer longer names
  group_by(std_name) %>% 
  summarise(std_scid = first(au_scid), .groups = "drop") %>% 
  arrange(desc(std_name))  # Descending order by name

# Step 4: Final Merge - Add Standardized Scopus IDs Back
oriau_byti2 <- oriau_byti1 %>% 
  left_join(stdscid_list1, by = "std_name")

oriau_byti2
Code
# Check for inconsistencies

oriau_byti2 %>% 
  count(std_name, std_scid) %>% 
  count(std_name) %>% filter(n > 1)
Code
oriau_byti2 %>% 
  count(std_name, std_scid) %>% 
  count(std_scid) %>% filter(n > 1)

3.4.1 Summary

Code
oriau_byti2 %>% 
  count(std_name) %>% 
  summarise(total_au = sum(n))
Code
oriau_byti2 %>% 
  count(std_name, sort = T) %>% 
  slice_head(n = 10) %>% 
  mutate(rank = row_number(), .before = 1)
Code
topau_9403 <- oriau_byti2 %>% 
  filter(PY %in% 1994:2003) %>% 
  count(std_name, sort = T) %>% 
  slice_head(n = 10) %>% 
  mutate(rank = row_number(), .before = 1)

topau_9403
Code
topau_9403_8list <- topau_9403 %>% 
  head(n = 8) %>% 
  pull(std_name)

oriau_byti2 %>% 
  filter(std_name %in% topau_9403_8list) %>% 
  arrange(desc(PY)) %>% 
  distinct(std_name, .keep_all = T) %>% 
  mutate(short_name = str_sub(std_name, 1, 10), 
         short_ti = str_sub(TI, 1, 40)) %>% 
  select(short_name, short_ti, std_name, TI)
Code
oriau_byti2 %>% 
  filter(PY %in% 2004:2013) %>% 
  count(std_name, sort = T) %>% 
  slice_head(n = 10) %>% 
  mutate(rank = row_number(), .before = 1)
Code
oriau_byti2 %>% 
  filter(PY %in% 2014:2023) %>% 
  count(std_name, sort = T) %>% 
  slice_head(n = 10) %>% 
  mutate(rank = row_number(), .before = 1)

3.5 Keywords

3.5.1 Summary

Code
pedob_bibds %>% 
  mutate(keyword_count = str_count(DE, ";") + 1) %>% 
  count(keyword_count)
Code
#4682B4 steelblue
#CD5C5C indianred
#2E8B57 seagreen

pedob_bibds %>% 
  mutate(keyword_count = str_count(DE, ";") + 1) %>% 
  count(keyword_count) %>% 
  ggplot(aes(x = keyword_count, y = n)) + 
  geom_col(fill = "#2E8B57", color = "black") + # seagreen
  scale_x_continuous(breaks = seq(1, 21, 1)) + 
  scale_y_continuous(breaks = seq(0, 5000, 500)) + 
  coord_cartesian(xlim = c(1, 11)) + # there are papers with DE > 15!
  labs(title = "Number of Author's Keyword per Articles", 
       x = "Author's Keywords Count", 
       y = "Number of Publications") +
  theme_bw()

Code
debyti <- pedob_bibds %>% 
  select(TI, PY, DE) %>% 
  separate_wider_delim(DE, delim = ";", names = paste0("de", 1:10), 
                       too_many = "drop", too_few = "align_start") %>% 
  pivot_longer(cols = starts_with("de"), 
               names_to = "de_position", 
               values_to = "de_aukw", 
               values_drop_na = T) %>% 
  mutate(de_aukw = str_trim(de_aukw), 
         de_aukw = str_to_upper(de_aukw), 
         de_aukw = str_replace_all(de_aukw, "\\s+", " "), 
         de_aukw = str_replace_all(de_aukw, "-", " "), 
         de_aukw = stri_trans_general(de_aukw, "Latin-ASCII") )

debyti
Code
debyti %>% 
  count(de_aukw, sort = T) 

3.5.2 Trend

Code
debyti %>% 
  filter(PY %in% 1994:2003) %>% 
  count(de_aukw, sort = T) 
Code
debyti %>% 
  filter(PY %in% 2004:2013) %>% 
  count(de_aukw, sort = T) 
Code
debyti %>% 
  filter(PY %in% 2014:2023) %>% 
  count(de_aukw, sort = T)